package max;

/**
 * 孔乙己？No 锻炼思维方式
 *
 * @author Max
 * @date 2021年4月12日
 * @description
 */
public class Swap {

	public static void main(String[] args) {
		Swap swap = new Swap();
		swap.example1();
		swap.example2();
		swap.example3();
	}

	public void example1() {
		System.out.println("临时变量");
		int a = 1;
		int b = 2;
		print("交换前", a, b);
		int temp = a;
		a = b;
		b = temp;
		print("交换后", a, b);
	}

	public void example2() {
		System.out.println("加减方式");
		int a = 1;
		int b = 2;
		print("交换前", a, b);
		b = a + b;
		a = b - a;
		b = b - a;
		print("交换后", a, b);
	}

	public void example3() {
		System.out.println("异或方式");
		int a = 1;
		int b = 2;
		print("交换前", a, b);
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
		print("交换后", a, b);
	}

	public void print(String des, int a, int b) {
		System.out.println(des);
		System.out.println("a = " + a);
		System.out.println("b = " + b);
	}

	/**
	 * 数组交换i,j
	 *
	 * @param array
	 * @param i
	 * @param j
	 */
	public static void array1(int[] array, int i, int j) {
		if (i == j)// 作用？
			return;
		int temp = array[i];
		array[i] = array[j];
		array[j] = temp;
	}

	/**
	 * 数组交换i,j 两数异或的结果保存了两个数上每一个二进制位不同或相同的信息
	 *
	 * @param array
	 * @param i
	 * @param j
	 */
	public static void array2(int[] array, int i, int j) {
		if (i == j)// 作用？
			return;
		array[i] = array[i] ^ array[j];
		array[j] = array[i] ^ array[j];
		array[i] = array[i] ^ array[j];
	}

	/**
	 * 数组交换i,j
	 *
	 * @param array
	 * @param i
	 * @param j
	 */
	public static void array3(int[] array, int i, int j) {
		if (i == j)// 作用？
			return;
		array[i] = array[i] + array[j];
		array[j] = array[i] - array[j];
		array[i] = array[i] - array[j];
	}

}
